package cn.zhouchao.basic.util;

import cn.zhouchao.basic.jwt.UserInfo;
import cn.zhouchao.basic.util.jwt.JwtUtils;
import cn.zhouchao.basic.util.jwt.Payload;
import cn.zhouchao.basic.util.jwt.RsaUtils;
import cn.zhouchao.user.domain.Logininfo;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.security.PublicKey;

/**
 * 登录上下文，把登录的相关信息放到这里面，方便调用
 */
public class LoginContext {

    public static UserInfo getUserInfo(HttpServletRequest request){
        //根据请求对象，获取请求头里面的token
        String token = request.getHeader("token");
        //判断token，若为空就直接结束
        if(StringUtils.isEmpty(token)){
            return null;
        }
        // 获取公钥，从我们提前初始化好的公私钥对象中获取
        PublicKey publicKey = RsaUtils.getPublicKey(JwtUtils.class.getClassLoader().getResource(JwtRasHolder.INSTANCE.getJwtRsaPubData()).getFile());
        // 通过公钥解析token，登陆载荷体
        Payload<UserInfo> payload = JwtUtils.getInfoFromToken(token, publicKey, UserInfo.class);
        if (null==payload && null ==payload.getUserInfo()){
            return null;
        }
        return payload.getUserInfo();

    }

    public static UserInfo getUserInfo(){
        return ThreadLocalUtil.get();//这里调用自定义的ThreadLocalUtil工具类，用于获取UserInfo对象
    }

    public static Logininfo getLogininfo(){
        return ThreadLocalUtil.get().getLogininfo();//这里调用自定义的ThreadLocalUtil工具类，用于获取UserInfo对象当中的封装的Logininfo对象
    }

}
